package com.sherlocky.learning.java11.collection;

/**
 * Java7 引入了一个新的特性：Diamond Operator，来避免冗长代码和提升可读性。
 *
 * 然而在 Java 8 中，Oracle 发现在 Diamond 操作器和匿名内部类的使用中存在一些局限性。
 *
 * @author: zhangcx
 * @date: 2019/9/26 16:27
 */
public class DiamondOperatorSample {
    public static void main(String[] args) {
        MyHandler<Integer> intHandler = new MyHandler<>(1) {
            @Override
            public void handle() {
                System.out.println("收到红包 > " + getContent() + "元");
            }
        };
        intHandler.handle();

        System.out.println("===================神奇的分割线===================");

        MyHandler<? extends Integer> intHandler1 = new MyHandler<>(10) {
            @Override
            void handle() {
                System.out.println("收到红包 > " + getContent() + "元");
            }
        };
        intHandler1.handle();

        System.out.println("===================神奇的分割线===================");

        MyHandler<?> handler = new MyHandler<>("魔法师") {
            @Override
            void handle() {
                System.out.println("马上把 [" + getContent() + "] 给处理了");
            }
        };
        handler.handle();
    }


    static abstract class MyHandler<T> {

        private T content;

        public MyHandler(T content) {
            this.content = content;
            System.out.println("构造函数收到了一条内容: " + content.toString());
        }

        public T getContent() {
            return content;
        }

        public void setContent(T content) {
            this.content = content;
        }

        abstract void handle();
    }
}
